﻿using System.Data;
using System.Data.SqlClient;

namespace MyOrder
{

    public  class SqlHelper
    {
        //读取配置文件，获取链接字符串
        //private static string constr = ConfigurationManager.ConnectionStrings["DLconnection"].ConnectionString;
        static string constr = SqlConnectionLianJie.GetConnection();
        //执行增（insert）删（delete）改（Update）的方法  #2
        public static int ExecuteNonQuery(string sql, params SqlParameter[] Parameters)
        {
            
            using (SqlConnection conn = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (Parameters != null)
                    {
                        cmd.Parameters.AddRange(Parameters);
                    }
                    conn.Open();
                    return cmd.ExecuteNonQuery();//返回受影响的行数
                }
            }
        }

        //参数是SqlParameter数组,params是长度可变的数组
        //执行查询多条数据#1
        public static DataSet ExecuteDataSet(string sql, params SqlParameter[] Parameters)
        {
            //Connection创建数据库连接
            using (SqlConnection conn = new SqlConnection(constr))
            {
                //打开数据库
                conn.Open();

                //通过连接创建一个向数据库发出命令的对象Command
                SqlCommand cmd = conn.CreateCommand();

                //CommandText为要执行的sql语句
                cmd.CommandText = sql;

                //foreach (SqlParameter para in Parameters)
                //{
                //    cmd.Parameters.Add(para);
                //}
                //给cmd提供参数AddRange是一次添加一个数组，add是一个数据
                cmd.Parameters.AddRange(Parameters);

                //SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet中的类
                SqlDataAdapter tapter = new SqlDataAdapter(cmd);

                //DataSet相当于本地的一个存储东西的复杂的集合
                DataSet dataset = new DataSet();

                //Fill是把数据填充到DataSet中
                tapter.Fill(dataset);
                return dataset;//返回DataSet集合
            }
        }

        //执行查询多条数据#2
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] Parameters)
        {
            SqlConnection conn = new SqlConnection(constr);
            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                if (Parameters != null)
                {
                    cmd.Parameters.AddRange(Parameters);
                }
                try
                {
                    conn.Open();
                    return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                }
                catch
                {
                    conn.Close();
                    conn.Dispose();
                    throw;
                }
            }
        }


        //执行查询一条数据
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] Parameters)
        {
            DataTable table = new DataTable();
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql, constr))
            {
                if (Parameters != null)
                {
                    adapter.SelectCommand.Parameters.AddRange(Parameters);
                }
                adapter.Fill(table);
            }
            return table;
        }

        //获得首行首列的id
        //执行查询返回单个值的方法
        public static object ExecuteScalar(string sql, params SqlParameter[] Parameters)
        {
            using (SqlConnection conn = new SqlConnection(constr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddRange(Parameters);

                conn.Open();

                return cmd.ExecuteScalar();
            }
        }
    }
}
